「초심자」무작정 해보는 AWS Fargate 환경 구축
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는「무작정 해보는 AWS Fargate 환경 구축」이라는 타이틀로 AWS Fargate 환경 구축 방법에 대해서 정리해 봤습니다.
이전에 작성한 ECS 구축 방법에 대해서는 아래 블로그를 참고해 주세요.
AWS Fargate란?
AWS Fargate Fargate는 Amazon EC2 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 Amazon ECS에 사용할 수 있는 기술입니다. Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없습니다.
즉, AWS Fargate를 사용하면 컨테이너와 컨테이너 실행 환경, 이 두가지를 관리할 필요가 없는 컨테이너 용 서버리스 컴퓨팅입니다.
이렇기 때문에 EC2 인스턴스(컨테이너를 실행하기 위한 서버 환경), 스케일링, 인스턴스 모음인 클러스터를 관리할 필요가 없기 때문에 관리 효율성을 높일 수 있습니다.
네트워크 구성
네트워크는 VPC 마법사를 이용해서 만들어줍니다.
- VPC 10.0.0.0/16
- Public Subnet-1 10.0.0.0/20
- Public Subnet-2 10.0.16.0/20
- Private Subnet-1 10.0.128.0/20
- Private Subnet-2 10.0.144.0/20
- Public RouteTable-1 (internet gateway)
- Public RouteTable-2 (internet gateway)
- Private RouteTable-1 (nat gateway)
- Private RouteTable-2 (nat gateway)
- internet gateway
- nat gateway
Application Load Balancer 생성
먼저 AWS Fargate를 생성하기에 앞서 로드 밸런서를 생성할 필요가 있습니다.
Application Load Balancer를 선택합니다.
로드 밸런서의 이름을 입력합니다.
VPC와 서브넷을 선택하는데, 여기서 서브넷은 반드시 Public Subnet을 선택합니다.
여기서 Private Subnet과 Public Subnet 선택의 차이점에 대해 궁금하신 분들은 아래 블로그를 참고해 주세요.
이어서 보안 그룹을 선택합니다. 보안 그룹의 경우 인바운드 TCP 80번 포트 0.0.0.0 으로 뚫린 보안 그룹을 선택합니다. 이러한 설정의 보안 그룹이 없다면 새로 하나 만들어서 설정합니다.
그리고 대상 그룹을 생성합니다.
대상 그룹의 경우 인스턴스를 추가 할 필요 없이 대상 그룹의 이름만 입력하고 생성을 끝마칩니다.
그리고 다시 로드 밸런서로 들어와서 생성한 대상 그룹을 선택하고 로드 밸런서 생성 버튼을 클릭합니다.
타겟 그룹의 경우 AWS Fargate를 생성하면 자동으로 타겟 그룹을 생성해주기 때문에 기존에 만들었던 타겟 그룹은 삭제합니다.
먼저 리스너에서 HTTP:80을 선택하고 삭제 버튼을 클릭합니다.
마지막으로 타겟 그룹을 삭제합니다.
ECR에 이미지 업로드
먼저 제가 작업하고 있는 환경은 mac이기 때문에 mac 환경에서 작업하시는 분들은 아래 블로그를 통해서 AWS CLI 환경을 구축해 주세요.
그 외에 EC2 인스턴스를 하나 생성해서, EC2 인스턴스 환경에서 이미지를 업로드 할 수도 있습니다. 이에 관련한 블로그는 아래를 참고해 주세요.
ECR 서비스로 들어와서「리포지토리 생성」버튼을 클릭합니다.
프라이빗을 선택하고, 리포지토리 이름을 입력한 다음 생성 버튼을 클릭합니다.
리포지토리에 이미지를 푸쉬하는 방법은 푸시 명령을 살펴보면 됩니다.
먼저 리포지토리에 푸쉬하기 전에 Dockerfile을 생성합니다.
FROM nginx:latest MAINTAINER "[email protected]" COPY ./index.html /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
dockerfile 이라는 이름으로 다음 코드를 입력합니다.
<!doctype html> <h1>hello fargate!</h1>
이어서 index.html 파일을 만들어서 다음과 같은 코드를 입력합니다.
이제 순서대로 푸시 명령을 입력하고 ECR 리포지토리로 들어와 보면 조금 전 푸쉬한 이미지 파일이 리포지토리에 정상적으로 푸쉬된 것을 확인할 수 있습니다.
여기서 주의할 점은 mac 환경일 경우 이미지를 빌드 할 시, 아래와 같은 코드를 사용해야 합니다.
- docker build --platform=linux/amd64 -t ecs-nginx .
자세한 내용은 아래 블로그를 참고해 주세요.
Fargate 생성
AWS ECR 서비스로 들어와서 클러스터 생성 버튼을 클릭합니다.
네트워킹 전용을 선택하고 다음 단계로 넘어갑니다.
클러스터 이름을 입력하고 생성 버튼을 클릭합니다.
이제 작업 정의로 넘어와서 새 작업 정의 생성 버튼을 클릭합니다.
여기서는 Fargate를 선택합니다.
태스크 이름을 입력하고 태스크 역할을 선택합니다. 마지막으로 운영 체제는 리눅스를 선택합니다.
태스크 역할에 대한 상세한 설명은 아래 링크를 참고해 주세요.
작업 실행 역할을 선택합니다. 작업 실행 역할의 경우 AWS에서 자동으로 생성해줍니다.
메모리와 CPU는 본인 환경에 맞춰서 설정합니다. 현재는 nginx만 돌리는 환경이기 때문에 가장 작은 메모리와 CPU를 선택했습니다.
이어서 컨테이너 추가를 클릭합니다.
컨테이너 이름을 입력한 다음, ECR 리포지토리의 URI를 이미지에 붙여넣습니다.
마지막으로 80번 포트를 입력하고 추가를 클릭해서 작업 정의 생성을 끝마칩니다.
이어서 클러스터로 들어온 다음 서비스 카테고리에서 생성 버튼을 클릭합니다.
시작 유형은 Fargate를 선택하고 서비스 이름을 입력한 다음 작업 개수는 2개로 입력합니다.
각 옵션에 대해서는 아래 링크를 참고해 주세요.
네트워크는 VPC와 Private Subnet을 선택합니다.
그리고 Private Subnet을 구성하는 경우 자동 할당 퍼블릭 IP를 Enable로 하거나, NAT Gateway를 설정할 필요가 있는데, 이미 NAT Gateway를 설정해둔 상태이기 때문에 Disabled로 선택합니다.
보안 그룹의 경우 80번 포트를 모두 허용하는 디폴트 보안그룹이 하나 생성되기 때문에 디폴트로 두고 넘어갑니다.
마지막으로 Application Load Balancer를 선택한 다음 리스너 포트를 80으로 설정하고 생성을 끝마칩니다. (오토스케일링은 따로 설정 안하고 넘어갑니다.)
최종 확인
작업 카테고리를 확인해 보면 2개의 Task가 생성된 것을 확인할 수 있습니다.
타겟 그룹으로 들어가보면 새로운 타겟 그룹이 하나 생성되어 있고, 작업 카테고리에 있던 2개의 Task가 등록된 것을 확인할 수 있습니다.
마지막으로 ALB DNS로 접속을 해 보면 성공적으로 웹 페이지가 출력되는 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.